package com.lagou.task20;

public class ClassTest {
    public static void main(String[] args) throws ClassNotFoundException {
        //
        /*一获取对象类实例：方法1使用数据类型.class的方式获取对应类型的的实例*/
        Class  c1 = String.class;
        System.out.println("c1 = " + c1);//class jaca.lang.String

        Class  c2 = int.class;
        System.out.println("c2 = " + c2);//class int

        Class  c3 = void.class;
        System.out.println("c3 = " + c3);//class void
        System.out.println("----------------------------------------------");

        //二获取对象类实例：方法2使用对象.getClass方法获取对应的Class对象
        String str1 = new String("hello");
        Class c4 = str1.getClass();
        System.out.println("c4 = " + c4);// class java.lang.String

        Integer it1 = 20;
        c4 = it1.getClass();
        System.out.println("c4 = " + c4);//class java.lang.Integer

        int num = 5;
//        num.getClass();Error, 基本数据类型不是对象，无法调用getClass；


        //三使用包装类.TYPE的方式获取基本数据类型的类对象
        c4 = Integer.TYPE;
        System.out.println("c4 = " + c4);//int

        c4 = Integer.class;
        System.out.println("c4 = " + c4);//int

        //四使用Class.forName方法来获取对应类型的类对象
//      c1 = Class.forName("String");//错误写法，必须写成完全限定名
        c1 = Class.forName("java.lang.String");
        System.out.println("c1 = " + c1);//class java.lang.String

        c1 = Class.forName("java.util.Date");
        System.out.println("c1 = " + c1);//class java.util.Date

        System.out.println("----------------------------------------------------");
        //五使用类加载器来获取class对象
        ClassLoader classLoader = ClassTest.class.getClassLoader();
        System.out.println("classLoader = " + classLoader );
        c1 = classLoader.loadClass("java.util.Date");
        System.out.println("c1 = " + c1);//class java.util.Date
    }
}
